package com.study.algorithm.container;
 
import java.util.Iterator;
import java.util.concurrent.CopyOnWriteArrayList;
 
/**
 * Copy-On-Write简称COW，是一种用于程序设计中的优化策略。
 * JDK里的COW容器有两种个：CopyOnWriteArrayList和CopyOnWriteArraySet
 * COW容器非常有用，可以在很多并发场景中使用到。
 * 什么时CopyOnWrite容器？
 * CopyOnWrite容器即写时复制容器。通俗理解就是当我们往一个容器添加元素的时候，不直接往当前容器添加，
 * 而是先将当前容器进行Copy，复制出一个新的容器，然后向新容器中添加元素，添加完元素后，再将原来容器的引用
 * 指向新的容器。这样做的好处是我们可以对CopyOnWrite容器进行并发读。，而不需要加锁，因为当前容器不会添加任何
 * 元素。所以CoptOnWrite容器也是一种读写分离的思想，读和写不同的容器。
 * @author jeffSheng
 *
 */
public class UseCopyOnWrite {
 
	public static void main(String[] args) {
		
		CopyOnWriteArrayList<String> cow = new CopyOnWriteArrayList<String>();
		cow.add("a");
		cow.add("b");
		cow.add("c");
		cow.add("d");
		cow.add("e");
		for (Iterator iterator = cow.iterator(); iterator.hasNext();) {
			String ele = (String) iterator.next();
			if(ele.equals("b")){
				cow.remove(ele);
			}
		}
		System.out.println(cow);
	}
}
